package Demo.ClassPath.Impl;

import Demo.ClassPath.Read;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

/**
 * 一个容器读取类，保存所有的加载类，当需要加载一个类时，访问该类，进行加载。
 * 这里传入的文件需要是全部的地址，是一个全类名
 */
public class CompositeRead implements Read {
    private List<Read> reads = new ArrayList<>();
    public CompositeRead(String fileStrings){
        String[] files = fileStrings.split(File.pathSeparator);
        for (String file : files) {
            reads.add(Read.create(file));
        }
    }
    @Override
    public byte[] readClass(String className) throws IOException {
        for (Read read : reads) {
            try {
                return read.readClass(className);//只返回第一个找到的类
            }catch (IOException e){
                // 不做处理的原因是，当前文件下没有该类，我们会抛出异常，
                // 但是此异常是正常现象，因为该类可能在其他类下面。
            }
        }
        throw new IOException("class not found "+className);
    }
}
